


import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class StudentTest {
    public static void main(String[] args) {
        ArrayList<Student> arr=new ArrayList<>();
        ArrayList<Uesr> arr1=new ArrayList<>();
        arr1.add(new Uesr("123L","1","123456789000000000","11111111111"));
        Scanner sc=new Scanner(System.in);
        System.out.println("欢迎来到学生管理系统");
        //System.out.println("请选择操作1登录 2注册 3忘记密码");
        loop2:while(true)
        {
            System.out.println("1登录2注册3忘记密码");
            int n=sc.nextInt();
            switch (n)
            {
                case 1:
                    System.out.println("登录");
                    boolean b1=DL(arr1);
                    if(b1)
                    {
                        break loop2;
                    }
                    break;
                case 2:
                    System.out.println("注册");
                    ZC(arr1);
                    break;
                case 3:
                    System.out.println("忘记密码");
                    WJ(arr1);
                    break;
                default:
                    System.out.println("无选项");
                    break;
            }
        }
        loop:while(true)
        {

        /*"-------------欢迎来到黑马学生管理系统----------------"
        "1：添加学生"
        "2：删除学生"
        "3：修改学生"
        "4：查询学生"
        "5：退出"
        "请输入您的选择:"*/
            System.out.println("-------------欢迎来到黑马学生管理系统----------------");
            System.out.println("1：添加学生");
            System.out.println("2：删除学生");
            System.out.println("3：修改学生");
            System.out.println("4：查询学生");
            System.out.println("5：退出");
            System.out.println("请输入您的选择:");
            int n=sc.nextInt();//输入选项

            switch(n)
            {
                case 1:{
                    System.out.println("添加学生");
                    TJ(arr);
                    break;
                }
                case 2: {
                    System.out.println("删除学生");
                    SC(arr);
                    break;
                }
                case 3: {
                    System.out.println("修改学生");
                    XG(arr);
                    break;
                }
                case 4: {
                    System.out.println("查询学生");
                    CX(arr);
                    break;
                }
                case 5: {
                    System.out.println("退出");
                    break loop;
                    //System.exit(0);//停止虚拟机运行
                }
                default:
                    System.out.println("无选项，输入错误");
                    break;

            }
        }
    }
    //系统内部功能
    public static void TJ(ArrayList<Student> arr) //添加
    {
        Scanner sc=new Scanner(System.in);
        Student stu=new Student();
        System.out.println("输入id");
        String ID=sc.next();
        System.out.println("输入姓名");
        String name=sc.next();
        System.out.println("输入年龄");
        int age=sc.nextInt();
        System.out.println("输入地址");
        String address=sc.next();
        stu.setID(ID);
        stu.setName(name);
        stu.setAge(age);
        stu.setAddress(address);
        arr.add(stu);
    }
    public static void XG(ArrayList<Student> arr) //修改
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("输入要修改的id");
        String ID=sc.next();
        int b=PD(arr,ID);
        if(b==-1)
        {
            System.out.println("不存在");
        }
        else{
            Student stu=arr.get(b);
            System.out.println("输入修改后的姓名");
            String name=sc.next();
            System.out.println("输入修改后的年龄");
            int age=sc.nextInt();
            System.out.println("输入修改后的地址");
            String address=sc.next();
            stu.setID(ID);
            stu.setName(name);
            stu.setAge(age);
            stu.setAddress(address);
        }
    }
    public static void SC(ArrayList<Student> arr) //删除
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("输入要删除的id");
        String ID=sc.next();
        int b=PD(arr,ID);
        if(b==-1)
        {
            System.out.println("不存在");
        }
        else{
            arr.remove(b);
        }
    }
    public static void CX(ArrayList<Student> arr) //查询
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("输入要查询的id");
        String ID=sc.next();
        int b=PD(arr,ID);
        if(b==-1)
        {
            System.out.println("不存在");
        }
        else{
            Student stu=arr.get(b);
            System.out.println("ID"+"\t"+"name"+"\t"+"age"+"\t"+"address");
            System.out.println(stu.getID()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress());

        }
    }
    public static int PD(ArrayList<Student> arr,String ID)         //判断id是否存在
    {
        for (int i = 0; i < arr.size(); i++)
        {
            Student stu=arr.get(i);
            if(stu.getID().equals(ID))
            {
                return i;

            }
        }
        return -1;
    }
    //                            注册******************
    public static boolean PDn(ArrayList<Uesr> arr1,String name)    //判断用户名是否存在
    {
        for (Uesr uesr : arr1) {
            if (uesr.getName().equals(name)) {
                return true;

            }
        }
        return false;
    }
    public static boolean PDS(String s)                            //判断是否为纯数字
    {
        for (int i = 0; i < s.length(); i++) {
            char n=s.charAt(i);
            if((n<(char)48)||(n>(char)57))
            {
                return false;
            }

        }
        return true;
    }
    public static boolean PD1(String s)                            // 判断是否为数字或者英文
    {
        for (int i = 0; i < s.length(); i++)
        {
            char c=s.charAt(i);
            if((c<(char)48)||((c>(char)57)&&(c<(char)65))||((c>(char)90)&&(c<(char)97))||(c>(char)122))
            {
                return false;
            }
        }
        return true;
    }
    public static void ZC(ArrayList<Uesr> arr1)              //注册
    {
        Scanner sc=new Scanner(System.in);
        Uesr uesr=new Uesr();
        while(true)                      //用户名
        {


            System.out.println("请设置用户名");
            String name=sc.next();
            boolean b=PDn(arr1,name);
            if(!b)
            {
                if((name.length()>3)&&(name.length()<15))
                {
                    boolean b1=PD1(name);
                    boolean b2=PDS(name);
                    if(b1&&(!b2))
                    {
                        uesr.setName(name);
                        break;
                    }
                    else {
                        System.out.println("必须为数字或者英文但不能为纯数字");
                    }
                }
                else
                {
                    System.out.println("长度不符合");
                }
            }
            else
            {
                System.out.println("用户名已存在");
            }

        }
        while(true)                      //密码
        {

            System.out.println("请设置密码");
            String s1=sc.next();
            System.out.println("请再次输入密码");
            String s2=sc.next();
            if(s1.equals(s2))
            {
                System.out.println("可以");
                uesr.setPassword(s1);
                break;
            }
            else {
                System.out.println("两次必须相同");
            }
        }
        while(true)                      //身份证
        {
            System.out.println("输入身份证号");
            String id=sc.next();
            if(id.length()==18)
            {
                String s1=id.substring(0,17);
                char c1=id.charAt(17);
                boolean b=PDS(s1);
                if(b)
                {
                    if((c1=='x')||(c1=='X')||((c1>=(char)48)&&(c1<=(char)57)))
                    {
                        uesr.setId(id);
                        System.out.println("可以");
                        System.out.println(uesr.getId());
                        break;
                    }
                    else{
                        System.out.println("最后一位只能为数字或者x,X");
                    }
                }
                else{
                    System.out.println("前17位必须全为数字");
                }
            }
            else {
                System.out.println("长度为18");
            }
    }
        while(true)                      //手机号
        {
            System.out.println("输入手机号");
            String yzm=sc.next();
            if(yzm.length()==11)
            {
                char ch=yzm.charAt(0);
                if(ch!=((char)48))
                {
                    uesr.setYzm(yzm);
                    System.out.println("可以");
                    break;
                }
                else{
                    System.out.println("第一位不为0");
                }
            }else
            {
                System.out.println("长度必须为11");
            }
        }
        arr1.add(uesr);
        System.out.println("注册完成");
        //System.out.println(arr1.get(0).getName());
        //System.out.println(uesr.getName());
}
//                                登录***********************
    public static boolean DL(ArrayList<Uesr> arr1)             //登录
    {
        Scanner sc=new Scanner(System.in);
        {
            System.out.println("请输入用户名");
            String name=sc.next();
            int b=PDn1(arr1,name);
            if(b!=(-1))
            {

                System.out.println(YZM().toString());
                System.out.println("输入验证码");
                String s2=sc.next();
                if(YZM().toString().equals(s2))
                {
                    for (int i = 0; i < 3; i++) {
                        Uesr u=arr1.get(b);
                        System.out.println("输入密码");
                        String password=sc.next();
                        if(u.getPassword().equals(password))
                        {
                            System.out.println("登录成功");
                            return true;
                        }
                        else{
                            System.out.println("密码错误");
                        }
                    }
                }
                else{
                    System.out.println("验证码错误");
                }
            }
            else {
                System.out.println("请先注册");
            }
            return false;
        }
    }
    public static String YZM(){
        char[] c=new char[52];  //生成a-z，A-Z，
        Random ra=new Random();
        for (int i = 0; i < c.length; i++)
        {
            if(i<26)
            {

                c[i]=(char)(97+i);
            }else{
                c[i]=(char)(65+i-26);
            }
        }
        char[] c1=new char[5];
        //System.out.println(c);
        for (int i = 0; i < c1.length-1; i++)   //随机生成四位英文验证码
        {

            int n= ra.nextInt(52);
            c1[i]=c[n];
        }

        int n2= ra.nextInt(10)+48;//随机生成1位数字验证码
        int n3= ra.nextInt(4);//将数字与英文混合打乱
        c1[4]=c[n3];
        c1[n3]=(char)n2;
        String ss=c1.toString();
        return ss;
    }
    public static int PDn1(ArrayList<Uesr> arr1,String name)    //判断用户名是否存在
    {
        for (int i = 0; i < arr1.size(); i++)
        {
           String s=arr1.get(i).getName();
            if(s.equals(name))
            {
                return i;

            }
        }
        return -1;
    }
    //                            忘记密码*******************
    public static void WJ(ArrayList<Uesr> arr1)                                 //忘记密码
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名");
        String name=sc.next();
        int b=PDn1(arr1,name);
        if(b!=(-1))
        {
            while(true)
            {
                System.out.println("输入身份证");
                String id=sc.next();
                System.out.println("输入手机号");
                String yzm=sc.next();
                if((arr1.get(b).getId().equals(id))&&(arr1.get(b).getYzm().equals(yzm)))
                {
                    System.out.println("输入新密码");
                    String password=sc.next();
                    arr1.get(b).setPassword(password);
                    break;
                }
                else{
                    System.out.println("信息不对");
                }
            }

        }
        else{
            System.out.println("不存在，先注册");
        }
    }
}